package templatemethod;

abstract class F{
    // 这就是定义个模版 子类去实现完事。
    void call(){
        opt1();
        opt2();
    }
    abstract void opt1();
    abstract void opt2();
}

/**
 * 子类重写了父类的方法并且被父类自动 调用。
 */
class C extends F{

    @Override
    void opt1() {
        System.out.println("opt1");
    }

    @Override
    void opt2() {
        System.out.println("opt2");
    }
}

public class TemplateMethod {
    public static void main(String[] args) {
        System.out.println("templateMethod ");

        F f = new C();
        f.call();
    }
}
